package edu.pe.cayetano.view.action;

import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.commons.beanutils.DynaBean;
import org.apache.commons.beanutils.RowSetDynaClass;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import ws.synopsis.frmwrk.common.BResult;
import edu.pe.cayetano.model.bean.OrdenServicioBean;
import edu.pe.cayetano.model.bean.OrdenServicioDetalleBean;
import edu.pe.cayetano.model.bean.PacienteBean;
import edu.pe.cayetano.model.bean.ServicioBean;
import edu.pe.cayetano.model.bean.UsuarioBean;
import edu.pe.cayetano.model.bo.AlumnoBO;
import edu.pe.cayetano.model.bo.CicloBO;
import edu.pe.cayetano.model.bo.EspecialidadBO;
import edu.pe.cayetano.model.bo.EstadoBO;
import edu.pe.cayetano.model.bo.OrdenServicioBO;
import edu.pe.cayetano.model.bo.PacienteBO;
import edu.pe.cayetano.model.bo.SedeBO;
import edu.pe.cayetano.model.bo.ServicioBO;
import edu.pe.cayetano.seccd.constantes.ConstantesListas;
import edu.pe.cayetano.seccd.constantes.ConstantesSECCD;
import edu.pe.cayetano.seccd.constantes.ConstantesSession;
import edu.pe.cayetano.util.EscribeLog;
import edu.pe.cayetano.util.Utilitario;
import edu.pe.cayetano.util.UtilitarioSession;

public class OrdenServicioAction extends BaseAction{
	
	private String page=null;
		
	/**
	 * Metodo que lista las ordenes de servicio
	 * */
	public ActionForward listar(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response){
		BResult				ret					= new BResult();
		OrdenServicioBO		ordenServicioBO 	= new OrdenServicioBO();
		try {
			HttpSession session = request.getSession(false);
			int codigoUsuario = ((UsuarioBean)session.getAttribute(ConstantesSession.USUARIO_LOGEADO)).getCodigo();
			ret = ordenServicioBO.listarOrdenServicio(codigoUsuario);
			if(ret.getCode()==0 && ret.getObject()!=null){
				page=ConstantesSECCD.EXITO;
				UtilitarioSession.eliminaParametrosBusquedaGenerico(session);
				UtilitarioSession.seteaParametrosListadoGenerico(session,(RowSetDynaClass)ret.getObject());
			}else{
				page=ConstantesSECCD.ERROR;
				EscribeLog.escribeLog("OrdenServicioAction","listar",ConstantesSECCD.ERROR,ret.getMessage());
				mostrarMensaje(request,ConstantesSECCD.ERROR_ORDENSERVICIO_LISTAR,new String[0],"home.do","home");
			}
		}catch (Exception e) {
			page=ConstantesSECCD.ERROR;
			EscribeLog.escribeLog("OrdenServicioAction","listar",ConstantesSECCD.ERROR,ConstantesSECCD.ERROR_ORDENSERVICIO_LISTAR);
			mostrarMensaje(request,ConstantesSECCD.ERROR_ORDENSERVICIO_LISTAR,new String[0],"home.do","home");
		}
		return mapping.findForward(page);	
	}
	
	/**
	 * Metodo para buscar ordenes de servicio desde el listado de ordenes de servicio 
	 * */
	public ActionForward buscarOrdenServicio(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response){
		BResult				ret					= new BResult();
		OrdenServicioBO		ordenServicioBO 	= new OrdenServicioBO();
		try {
			HttpSession 		session 	= request.getSession(false);
			DynaBean			dyna		= Utilitario.createDynaBeanFromRequest("dynaBean", request);
			int codigoUsuario = ((UsuarioBean)session.getAttribute(ConstantesSession.USUARIO_LOGEADO)).getCodigo();
			ret = ordenServicioBO.buscarOrdenServicio(dyna,codigoUsuario);
			if(ret.getCode()==0 && ret.getObject()!=null){
				page=ConstantesSECCD.EXITO;
				UtilitarioSession.seteaParametrosBusquedaGenerico(session,(RowSetDynaClass)ret.getObject(),dyna);
			}else{
				page=ConstantesSECCD.ERROR;
				mostrarMensaje(request,ConstantesSECCD.ERROR_ORDENSERVICIO_BUSQUEDA,new String[0],"ordenServicio.do","listar");
			}
		}catch (Exception e) {
			page=ConstantesSECCD.ERROR;
			mostrarMensaje(request,ConstantesSECCD.ERROR_ORDENSERVICIO_BUSQUEDA,new String[0],"ordenServicio.do","listar");
		}
		return mapping.findForward(page);	
	}
	
	/**
	 * Metodo que carga la pagina para editar una orden de servicio
	 * */
	public ActionForward cargaEditaOrdenServicio(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response){
		BResult					retOS				= new BResult();
		OrdenServicioBO			ordenServicioBO  	= new OrdenServicioBO();
		EspecialidadBO			especialidadBO		= new EspecialidadBO();
		
		try{
			HttpSession 		session 	= request.getSession(false);
			
			DynaBean			dyna		= Utilitario.createDynaBeanFromRequest("dynaBean", request);
			retOS = ordenServicioBO.buscarOrdenServicioEspecifico(dyna);
			if(retOS.getCode()==0 && retOS.getObject()!=null){
				SedeBO					sedeBO  = new SedeBO();
				BResult					retS 	= sedeBO.getSedes();
				if(retS.getCode()==0 && retS.getObject()!=null){
					BResult					retE			= especialidadBO.getEspecialidadadesxSede(((OrdenServicioBean)retOS.getObject()).getSedeID());
					if(retE.getCode()==0 && retE.getObject()!=null){
						BResult			retSE			= new BResult();
						ServicioBO		servicioBO  	= new ServicioBO();
						retSE = servicioBO.getServiciosxEspecialidadesxSedes(((OrdenServicioBean)retOS.getObject()).getEspecialidadID());
						if(retSE.getCode()==0 && retSE.getObject()!=null){
							BResult			retC		= new BResult();
							CicloBO			cicloBO  	= new CicloBO();
							retC = cicloBO.getCiclos();
							if(retC.getCode()==0 && retC.getObject()!=null){
								BResult			retA		= new BResult();
								AlumnoBO		alumnoBO  	= new AlumnoBO();
								retA = alumnoBO.getAlumnosxCiclo(((OrdenServicioBean)retOS.getObject()).getCicloID());	
								if(retA.getCode()==0 && retA.getObject()!=null){
									
									BResult			retST		= new BResult();
									EstadoBO		estadoBO  	= new EstadoBO();
									retST = estadoBO.getEstados(ConstantesSECCD.OPT_ORDEN_SERVICIO);
																	
									if(retST.getCode()==0 && retST.getObject()!=null){
										UtilitarioSession.seteaParametrosCargaEditaOS(session,retOS);
										
										PacienteBean			pacienteBean		= new PacienteBean();
										pacienteBean.setNombreCompleto(((OrdenServicioBean)retOS.getObject()).getNombreCompleto());
										pacienteBean.setDni(((OrdenServicioBean)retOS.getObject()).getDni());
										pacienteBean.setPaciente_id(((OrdenServicioBean)retOS.getObject()).getPacienteID());
										
										session.setAttribute(ConstantesSession.PACIENTETO,pacienteBean);
										session.setAttribute(ConstantesSession.ORDENSERVICIOTO,(OrdenServicioBean)retOS.getObject());
										
										session.setAttribute(ConstantesListas.LISTA_SEDES, (ArrayList<?>)(retS.getObject()));
										session.setAttribute(ConstantesListas.LISTA_ESPECIALIDADES, (ArrayList<?>)retE.getObject());
										session.setAttribute(ConstantesListas.LISTA_SERVICIOS, (ArrayList<?>)retSE.getObject());
										session.setAttribute(ConstantesListas.LISTA_CICLOS, (ArrayList<?>)retC.getObject());
										session.setAttribute(ConstantesListas.LISTA_ESTADOS, (ArrayList<?>)retST.getObject());	
										session.setAttribute(ConstantesListas.LISTA_OPERADORES, (ArrayList<?>)retA.getObject());
										
										page=ConstantesSECCD.EXITO;
									}else{
										page=ConstantesSECCD.ERROR;
										EscribeLog.escribeLog("OrdenServicioAction","cargaEditaOrdenServicio",ConstantesSECCD.ERROR,retA.getMessage());
										mostrarMensaje(request,ConstantesSECCD.ERROR_ORDENSERVICIO_CARGAEDITAR,new String[0],"ordenServicio.do","listar");
									}
								}else{
									page=ConstantesSECCD.ERROR;
									EscribeLog.escribeLog("OrdenServicioAction","cargaEditaOrdenServicio",ConstantesSECCD.ERROR,retA.getMessage());
									mostrarMensaje(request,ConstantesSECCD.ERROR_ORDENSERVICIO_CARGAEDITAR,new String[0],"ordenServicio.do","listar");
								}
							}else{
								page=ConstantesSECCD.ERROR;
								EscribeLog.escribeLog("OrdenServicioAction","cargaEditaOrdenServicio",ConstantesSECCD.ERROR,retC.getMessage());
								mostrarMensaje(request,ConstantesSECCD.ERROR_ORDENSERVICIO_CARGAEDITAR,new String[0],"ordenServicio.do","listar");
							}
						}else{
							page=ConstantesSECCD.ERROR;
							EscribeLog.escribeLog("OrdenServicioAction","cargaEditaOrdenServicio",ConstantesSECCD.ERROR,retSE.getMessage());
							mostrarMensaje(request,ConstantesSECCD.ERROR_ORDENSERVICIO_CARGAEDITAR,new String[0],"ordenServicio.do","listar");
						}
					}else{
						page=ConstantesSECCD.ERROR;
						EscribeLog.escribeLog("OrdenServicioAction","cargaEditaOrdenServicio",ConstantesSECCD.ERROR,retE.getMessage());
						mostrarMensaje(request,ConstantesSECCD.ERROR_ORDENSERVICIO_CARGAEDITAR,new String[0],"ordenServicio.do","listar");
					}
				}else{
					page=ConstantesSECCD.ERROR;
					EscribeLog.escribeLog("OrdenServicioAction","cargaEditaOrdenServicio",ConstantesSECCD.ERROR,retS.getMessage());
					mostrarMensaje(request,ConstantesSECCD.ERROR_ORDENSERVICIO_CARGAEDITAR,new String[0],"ordenServicio.do","listar");
				}
			}else{
				page=ConstantesSECCD.ERROR;
				EscribeLog.escribeLog("OrdenServicioAction","cargaEditaOrdenServicio",ConstantesSECCD.ERROR,retOS.getMessage());
				mostrarMensaje(request,ConstantesSECCD.ERROR_ORDENSERVICIO_CARGAEDITAR,new String[0],"ordenServicio.do","listar");
			}
		}catch(Exception e) {
			page=ConstantesSECCD.ERROR;
			EscribeLog.escribeLog("OrdenServicioAction","cargaEditaOrdenServicio",ConstantesSECCD.ERROR,ConstantesSECCD.ERROR_ORDENSERVICIO_CARGAEDITAR);
			mostrarMensaje(request,ConstantesSECCD.ERROR_ORDENSERVICIO_CARGAEDITAR,new String[0],"ordenServicio.do","listar");
		}	
		return mapping.findForward(page);	
		
	}
	
	/**
	 * Metodo que carga la pagina para insertar una orden de servicio 
	 * */
	public ActionForward cargaInsertaOrdenServicio(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response){
		BResult					retS	= new BResult();
		SedeBO					sedeBO  = new SedeBO();
		try{
			HttpSession 		session 	= request.getSession(false);
			retS = sedeBO.getSedes();
			if(retS.getCode()==0 && retS.getObject()!=null){
				BResult			retC		= new BResult();
				CicloBO			cicloBO  	= new CicloBO();
				retC = cicloBO.getCiclos();
					if(retC.getCode()==0 && retC.getObject()!=null){
						session.setAttribute(ConstantesListas.LISTA_SEDES, (ArrayList<?>)retS.getObject());
						session.setAttribute(ConstantesListas.LISTA_CICLOS, (ArrayList<?>)retC.getObject());
						UtilitarioSession.eliminaAtributosSessionOrdenServicio(session);
						page=ConstantesSECCD.EXITO;
					}else{
						page=ConstantesSECCD.ERROR;
						EscribeLog.escribeLog("OrdenServicioAction","cargaInsertaOrdenServicio",ConstantesSECCD.ERROR,retS.getMessage());
						mostrarMensaje(request,ConstantesSECCD.ERROR_ORDENSERVICIO_CARGAINSERTAR,new String[0],"ordenServicio.do","listar");
					}
				}else{
					page=ConstantesSECCD.ERROR;
					EscribeLog.escribeLog("OrdenServicioAction","cargaInsertaOrdenServicio",ConstantesSECCD.ERROR,retS.getMessage());
					mostrarMensaje(request,ConstantesSECCD.ERROR_ORDENSERVICIO_CARGAINSERTAR,new String[0],"ordenServicio.do","listar");
				}
		}catch(Exception e) {
			page=ConstantesSECCD.ERROR;
			EscribeLog.escribeLog("OrdenServicioAction","cargaInsertaOrdenServicio",ConstantesSECCD.ERROR,ConstantesSECCD.ERROR_ORDENSERVICIO_CARGAINSERTAR);
			mostrarMensaje(request,ConstantesSECCD.ERROR_ORDENSERVICIO_CARGAINSERTAR,new String[0],"ordenServicio.do","listar");
		}	
		return mapping.findForward(page);	
	}

	/**
	 * Metodo para buscar un operador(alumno) de acuerdo al ciclo que este matriculado
	 * */
	public ActionForward buscarOperadorCiclo(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response){

		BResult			ret			= new BResult();
		AlumnoBO		alumnoBO  	= new AlumnoBO();
	
		try{
			HttpSession 		session 	= request.getSession(false);
			DynaBean			dyna		= Utilitario.createDynaBeanFromRequest("dynaBean", request);
			ret = alumnoBO.getAlumnosxCiclo(dyna);
			if(ret.getCode()==0 && ret.getObject()!=null){
				page = UtilitarioSession.establecePaginaExito(dyna);
				UtilitarioSession.seteaAtributosSessionOrdenServicio(session,dyna,ret,ConstantesListas.LISTA_OPERADORES);
			}else{
				page=ConstantesSECCD.ERROR;
				EscribeLog.escribeLog("OrdenServicioAction","buscarOperadorCiclo",ConstantesSECCD.ERROR,ConstantesSECCD.ERROR_ORDENSERVICIO_CARGAINSERTAR);
				mostrarMensaje(request,ConstantesSECCD.ERROR_ORDENSERVICIO_CARGAINSERTAR,new String[0],"ordenServicio.do","listar");
			}
		}catch (Exception e) {
			page=ConstantesSECCD.ERROR;
			EscribeLog.escribeLog("OrdenServicioAction","buscarOperadorCiclo",ConstantesSECCD.ERROR,ConstantesSECCD.ERROR_ORDENSERVICIO_CARGAINSERTAR);
			mostrarMensaje(request,ConstantesSECCD.ERROR_ORDENSERVICIO_CARGAINSERTAR,new String[0],"ordenServicio.do","listar");
		}
		return mapping.findForward(page);	
	}
	
	/**
	 * Metodo para insertar una orden de servicio
	 * */
	public ActionForward insertaOrdenServicio(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response){
		BResult				ret					= new BResult();
		OrdenServicioBO		ordenServicioBO  	= new OrdenServicioBO();

		try{
			DynaBean			dyna		= Utilitario.createDynaBeanFromRequest("dynaBean", request);
			ret = ordenServicioBO.insertaOrdenServicio(dyna);
			if(ret.getCode()==0){
				mostrarMensaje(request,ConstantesSECCD.EXITO_ORDENSERVICIO_INSERTAR,new String[0],"ordenServicio.do","listar");
				page=ConstantesSECCD.EXITO;
			}else{
				page=ConstantesSECCD.ERROR;
				EscribeLog.escribeLog("OrdenServicioAction","insertaOrdenServicio",ConstantesSECCD.ERROR,ret.getMessage());
				mostrarMensaje(request,ConstantesSECCD.ERROR_ORDENSERVICIO_INSERTAR,new String[0],"ordenServicio.do","listar");
			}
		}catch (Exception e) {
			page=ConstantesSECCD.ERROR;
			EscribeLog.escribeLog("OrdenServicioAction","insertaOrdenServicio",ConstantesSECCD.ERROR,ret.getMessage());
			mostrarMensaje(request,ConstantesSECCD.ERROR_ORDENSERVICIO_INSERTAR,new String[0],"ordenServicio.do","listar");
		}
		return mapping.findForward(page);	
	}

	/**
	 * Metodo para editar una orden de servicio
	 * */
	public ActionForward editaOrdenServicio(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response){
		BResult				ret					= new BResult();
		OrdenServicioBO		ordenServicioBO  	= new OrdenServicioBO();

		try{
			DynaBean			dyna		= Utilitario.createDynaBeanFromRequest("dynaBean", request);
			ret = ordenServicioBO.editaOrdenServicio(dyna);
			if(ret.getCode()==0){
				mostrarMensaje(request,ConstantesSECCD.EXITO_ORDENSERVICIO_EDITAR,new String[0],"ordenServicio.do","listar");
				page=ConstantesSECCD.EXITO;
			}else{
				page=ConstantesSECCD.ERROR;
				EscribeLog.escribeLog("OrdenServicioAction","editaOrdenServicio",ConstantesSECCD.ERROR,ret.getMessage());
				mostrarMensaje(request,ConstantesSECCD.ERROR_ORDENSERVICIO_EDITAR,new String[0],"ordenServicio.do","listar");
			}
		}catch (Exception e) {
			page=ConstantesSECCD.ERROR;
			EscribeLog.escribeLog("OrdenServicioAction","editaOrdenServicio",ConstantesSECCD.ERROR,ret.getMessage());
			mostrarMensaje(request,ConstantesSECCD.ERROR_ORDENSERVICIO_EDITAR,new String[0],"ordenServicio.do","listar");
		}
		return mapping.findForward(page);	
	}
	
	public ActionForward buscarPacienteOS(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response){
		BResult				ret				= new BResult();
		PacienteBO		pacienteBO 	= new PacienteBO();
		
		try{
			HttpSession 		session 	= request.getSession(false);
			DynaBean			dyna		= Utilitario.createDynaBeanFromRequest("dynaBean", request);
			
			ret = pacienteBO.buscarPaciente_for_OS(dyna);
			if(ret.getCode()==0 && ret.getObject()!=null){
				page = UtilitarioSession.establecePaginaExito(dyna);
				UtilitarioSession.seteaAtributosSessionOrdenServicio(session,dyna,ret,ConstantesSession.PACIENTETO);
			}else{
				page=ConstantesSECCD.ERROR;
				EscribeLog.escribeLog("OrdenServicioAction","buscarPacienteOS",ConstantesSECCD.ERROR,ret.getMessage());
				mostrarMensaje(request,ConstantesSECCD.ERROR_ORDENSERVICIO_CARGAINSERTAR,new String[0],"ordenServicio.do","listar");
			}
		}catch (Exception e) {
			page=ConstantesSECCD.ERROR;
			EscribeLog.escribeLog("OrdenServicioAction","buscarPacienteOS",ConstantesSECCD.ERROR,ret.getMessage());
			mostrarMensaje(request,ConstantesSECCD.ERROR_ORDENSERVICIO_CARGAINSERTAR,new String[0],"ordenServicio.do","listar");
		}
		return mapping.findForward(page);	
	}
	
	public ActionForward buscarEspecialidadxSedeOS(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response){
		BResult			ret			= new BResult();
		EspecialidadBO		especialidadBO 	= new EspecialidadBO();
		
		try{
			HttpSession 		session 	= request.getSession(false);
			DynaBean			dyna		= Utilitario.createDynaBeanFromRequest("dynaBean", request);
		        
			ret = especialidadBO.getEspecialidadadesxSede(dyna);
			if(ret.getCode()==0 && ret.getObject()!=null){
				page = UtilitarioSession.establecePaginaExito(dyna);
				UtilitarioSession.seteaAtributosSessionOrdenServicio(session,dyna,ret,ConstantesListas.LISTA_ESPECIALIDADES);
				session.removeAttribute(ConstantesListas.LISTA_SERVICIOS);
			}else{
				page=ConstantesSECCD.ERROR;
				EscribeLog.escribeLog("OrdenServicioAction","buscarEspecialidadxSede",ConstantesSECCD.ERROR,ret.getMessage());
				mostrarMensaje(request,ConstantesSECCD.ERROR_ORDENSERVICIO_CARGAINSERTAR,new String[0],"ordenServicio.do","listar");
			}
		}catch (Exception e) {
			page=ConstantesSECCD.ERROR;
			EscribeLog.escribeLog("OrdenServicioAction","buscarEspecialidadxSede",ConstantesSECCD.ERROR,ret.getMessage());
			mostrarMensaje(request,ConstantesSECCD.ERROR_ORDENSERVICIO_CARGAINSERTAR,new String[0],"ordenServicio.do","listar");
		}
		return mapping.findForward(page);	
	}

	/**
	 * Metodo para buscar servicios por especialidades
	 * */
	public ActionForward buscarServicioxEspecialidadxSedeOS(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response){
		BResult			ret			= new BResult();
		ServicioBO		servicioBO 	= new ServicioBO();
		
		try{
			HttpSession 		session 	= request.getSession(false);
			DynaBean			dyna		= Utilitario.createDynaBeanFromRequest("dynaBean", request);

			ret = servicioBO.getServiciosxToxOS(dyna);
			if(ret.getCode()==0 && ret.getObject()!=null){
				page = UtilitarioSession.establecePaginaExito(dyna);
				UtilitarioSession.seteaAtributosSessionOrdenServicio(session,dyna,ret,ConstantesListas.LISTA_SERVICIOS);
			}else{
				page=ConstantesSECCD.ERROR;
				EscribeLog.escribeLog("OrdenServicioAction","buscarServicioxEspecialidadxSede",ConstantesSECCD.ERROR,ret.getMessage());
				mostrarMensaje(request,ConstantesSECCD.ERROR_ORDENSERVICIO_CARGAINSERTAR,new String[0],"ordenServicio.do","listar");
			}
		}catch (Exception e) {
			page=ConstantesSECCD.ERROR;
			EscribeLog.escribeLog("OrdenServicioAction","buscarServicioxEspecialidadxSede",ConstantesSECCD.ERROR,ret.getMessage());
			mostrarMensaje(request,ConstantesSECCD.ERROR_ORDENSERVICIO_CARGAINSERTAR,new String[0],"ordenServicio.do","listar");
		}
		return mapping.findForward(page);	
	}
	
	public ActionForward agregaServicioxOS(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response){

		BResult						ret					= new BResult();
		HttpSession 				session 			= request.getSession(false);
		
		try{
			DynaBean					dyna				= Utilitario.createDynaBeanFromRequest("dynaBean", request);   
			OrdenServicioDetalleBean	detalleOSTO			= new OrdenServicioDetalleBean();
			ServicioBO					servicioBO			= new ServicioBO();
			OrdenServicioBO				ordenServicioBO		= new OrdenServicioBO();
			String 						cboSede 			= request.getParameter("cboSede");
			String 						cboEspecialidad 	= request.getParameter("cboEspecialidad");
			String 						cboServicio 		= request.getParameter("cboServicio");
			
			String 						cantidades[] 		= request.getParameterValues("cantidades");
		    String 						sedes[] 			= request.getParameterValues("sedes");
			String 						especialidades[]	= request.getParameterValues("especialidades");
			String 						servicios[] 		= request.getParameterValues("servicios");
			String 						concatenados[] 		= request.getParameterValues("concatenados");			
			String 						nSedes[] 			= request.getParameterValues("nomSedes");
			String 						nEspecialidades[]	= request.getParameterValues("nomEspecialidades");
			String 						nServicios[] 		= request.getParameterValues("nomServicios");
            
			
			String 						newRegistro 		= cboSede+"-"+cboEspecialidad+"-"+cboServicio;
			// recupero de session el hashtable
    		Map 						hashtable 			= (Map) session.getAttribute("hashtableServicioxPT");
    		// si es nulo, significa que es le primer registro.... pasa cuando entro por primera vez
    		if(hashtable == null){
    			hashtable = new LinkedHashMap();
        	}
    		
    		System.out.println("cboSede::<"+cboSede+">");
    		System.out.println("cboEspecialidad::<"+cboEspecialidad+">");
    		System.out.println("cboServicio::<"+cboServicio+">");
    		System.out.println("newRegistro::<"+newRegistro+">");
    		
    		ret = servicioBO.buscaDetalleCompletoServicio(dyna);
    		
    		// validando que la consulta del detalle de servicio sea correcta
           	if(ret.getCode()==0 && ret.getObject()!=null){
           		detalleOSTO = (OrdenServicioDetalleBean)ret.getObject();
           		detalleOSTO.setConcatenado(newRegistro);
           		detalleOSTO.setCantidad(1);
        		
    			// se verifica si es primer registro.....
    			if(cantidades==null){
        			hashtable.put(newRegistro, detalleOSTO);
                }else{
                	hashtable = ordenServicioBO.generaDetallexOrdenServicio(hashtable, concatenados,
                			sedes,especialidades,servicios,
                			cantidades,nSedes,nEspecialidades,nServicios);
                	hashtable.put(newRegistro, detalleOSTO);
                }	
    		}		
    		    		
	        hashtable = Utilitario.ordenarElementosMap(hashtable);
            page = UtilitarioSession.establecePaginaExito(dyna);           
            System.out.println("valor de page para agregaServicioxOS::"+page);
            session.setAttribute("hashtableDetalleOrdenServicio", hashtable);
	        
		}catch (Exception e) {
			page=ConstantesSECCD.ERROR;
			EscribeLog.escribeLog("OrdenServicioAction","eliminaServicioxOrdenServicio",ConstantesSECCD.ERROR,ret.getMessage());
			mostrarMensaje(request,ConstantesSECCD.ERROR_ORDENSERVICIO_CARGAINSERTAR,new String[0],"ordenServicio.do","listar");
		}
		return mapping.findForward(page);	
	}
	
	public ActionForward eliminaServicioxOrdenServicio(ActionMapping mapping,ActionForm form,HttpServletRequest request,
			HttpServletResponse response){
		
		try{
			HttpSession 		session 	= request.getSession(false);
			Map hashtable = (Map) session.getAttribute("hashtableDetalleOrdenServicio");
	        
			DynaBean			dyna		= Utilitario.createDynaBeanFromRequest("dynaBean", request);
			String codigo = (String)Utilitario.getPropertyDynaBean(dyna, "codigo");
	
			hashtable.remove(codigo);
            
			page = UtilitarioSession.establecePaginaExito(dyna);
			session.setAttribute("hashtableDetalleOrdenServicio", hashtable);
		}catch (Exception e) {
			page=ConstantesSECCD.ERROR;
			EscribeLog.escribeLog("OrdenServicioAction","eliminaServicioxOrdenServicio",ConstantesSECCD.ERROR,e.getMessage().toString());
			mostrarMensaje(request,ConstantesSECCD.ERROR_ORDENSERVICIO_CARGAINSERTAR,new String[0],"planTratamiento.do","listar");
		}		
	
		return mapping.findForward(page);	
	}
}
